SNFフォーマット V1.0 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0x00-0xff SNFヘッダ 0x100- データ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ヘッダ情報(256バイト) 0x00-0x03 識別子("SNF\0") 0x04 バージョンナンバー上位 0x05 バージョンナンバー下位 0x06-0x07 予約域(誰が予約しているんでしょうか?) 0x08-0x39 タイトル名(半角で56文字) 0x40-0x49 FM音源ファイル名(ASCIIZで16文字まで) 0x50-0x59 PCM音源ファイル名(同上。未サポート) 0x60-0x79 作成アプリ名 0x80-0xb9 各パートのデータサイズ。各パートごとにデータ管理を行っているの で、それを4バイト(符号付)で羅列する。残りは0で埋めておいた  方が確実。 0xc0-0xff 予約域 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ○データ域  以降は、データの固まりとなる。パート毎の区切りは、ヘッダ情報の「各パートのデータサイズ」によって決定することになる。それによって各パートの演奏データの開始場所が分かる。 ○演奏ソフト情報  以下は、演奏ソフトが情報を持つことになる。 ボリューム ピッチ パンポッド コントロール(音色) テンポ  特にボリュームは、BIOSなどでキーONする時に必要。  これらのデフォルト値についての規定は無いが、省略されてもまともに演奏できるく らいの配慮は必要。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 演奏データ 0x00 データの終了 0xff データのループ指定 どちらかがパートの最後にこなくてはならない。演奏ソフトはパート  のデータサイズで最後だと判断する必要はない。 0x01-0x7f 音程(1〜127) 次に長さが2バイトで表される。ゲートタイムなどはMMLコンパイ  ラに委ねられるから、一つの音譜は大抵は休符とセットになる。 0x80 休符 次に長さが1ワードで表される。 0x90 テンポ変更 次に値を1バイトで決める。 この時、0〜255は30〜285になる。つまり30引いた値。 0xa0 コントロールチェンジ 次に値を1バイト(実は7ビット)で決める。 この時、0〜127が1〜128になる。 0xb0 ボリューム変更 次の値を1バイト(実は7ビット)で決める。 この時、ボリューム0は認められない。 0xc0 ピッチの変更 次の値を符号付2バイトで決めるが、実質は前後八千くらい。 0xd0 パンポッド変更 次の値を1バイト(実は符号付7ビット)で決める。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━  V1.1が出来るとすれば、PCMについても考慮される。  ゲートタイムを内部情報として持てば、データは大幅に削減されるので、それも予定 している。